const express = require("express");
// 创建 express 的服务器实例
const app = express();
const cors = require("cors");
const userRouter = require("./router/user");
const commodity = require("./router/commodity");
const config = require("./config");
// 解析 token 的中间件
const expressJWT = require("express-jwt");
var bodyParser = require("body-parser"); //用于req.body获取值的

app.use(bodyParser.json());
// 使用 .unless({ path: [/^\/api\//] }) 指定哪些接口不需要进行 Token 的身份认证
app.use(function (req, res, next) {
  // status = 0 为成功； status = 1 为失败； 默认将 status 的值设置为 1，方便处理失败的情况
  res.cc = function (err, status) {
    res.send({
      // 状态
      status,
      // 状态描述，判断 err 是 错误对象 还是 字符串
      message: err instanceof Error ? err.message : err,
    });
  };
  next();
});
app.use(
  expressJWT({ secret: config.jwtSecretKey }).unless({ path: [/^\/api\//] })
);
app.use(cors());
app.use(express.urlencoded({ extended: false }));
// 响应数据的中间件

// 错误中间件
app.use(function (err, req, res, next) {
  // 省略其它代码...
  // 捕获身份认证失败的错误
  if (err.name === "UnauthorizedError") return res.cc("身份认证失败！");
  // 未知错误...
});
app.use("/api", userRouter);
app.use("/api", commodity);
// 调用 app.listen 方法，指定端口号并启动web服务器
app.listen(3007, function () {
  console.log("api server running at http://127.0.0.1:3007");
});
